package org.goyo.common.utils;

import java.util.List;

/**
 * 分页器
 * @param <T>
 * @param <T>
 *
 * @param <T>
 */
public class Pager<T> {
	
	/**
	 * 降序
	 */
	public static String DESC="desc";
	
	/**
	 * 升序
	 */
	public static String ASC="asc";
	/**
	 * 当前页码
	 */
	public int currPage = 1;
	/**
	 * 每页显示的记录数
	 */
	public int pageSize = 20;

	/**
	 * 上页记录数（翻页显示上衣页的行数）
	 */
	public int preRow = 0;

	/**
	 * 总的记录数
	 */
	public int count = 0;

	/**
	 * 排序的字段
	 */
	public String sortname = "number";
	
	/**
	 * 排序的方向
	 */
	public String sortorder = DESC;
	
	
	public List<T> list = null;
	
	public Pager() {
		super();
	}

	/**
	 * 
	 * @param pageSize
	 *            每页记录数
	 */
	public Pager(final int pageSize) {
		setPageSize(pageSize);
	}

	/**
	 * 
	 * @param pageSize
	 *            每页记录数
	 * @param _curPageNo
	 *            当前记录数
	 */
	public Pager( final int curPageNo,final int pageSize) {
		setPageSize(pageSize);
		this.currPage = curPageNo;
	}

	/**
	 * 获得当前页的页号
	 */
	public int getCurrPage() {
		return currPage;
	}

	/**
	 * 设置当前页的页号,低于1时自动调整为1.
	 * 
	 * @param curPageNo
	 */
	public void setCurrPage(final int curPageNo) {
		this.currPage = curPageNo;

		if (curPageNo < 1) {
			this.currPage = 1;
		}
	}

	/**
	 * 获得每页的记录数
	 */
	public int getPageSize() {
		return pageSize;
	}

	/**
	 * 设置每页的记录数
	 * 
	 * @param pageSize
	 */
	public void setPageSize(final int pageSize) {
		this.pageSize = pageSize;
	}

	/**
	 * 根据curPageNo和pageSize（每页显示记录数）计算当前页第一条记录在总结果集中的位置
	 */
	public int getStartRowIndex() {
		int startRowIndex = 0;
		if (currPage > 1) {
			startRowIndex = ((currPage - 1) * pageSize) - preRow;
		} else {
			startRowIndex = ((currPage - 1) * pageSize);
		}
		if (startRowIndex < 0) {
			startRowIndex = 0;
		}
		return startRowIndex;
	}


	public int getPreRow() {
		return preRow;
	}

	public void setPreRow(int preRow) {
		this.preRow = preRow;
	}

	public int getCount() {
		return count;
	}

	public void setCount(int count) {
		this.count = count;
	}
	
	public String getSortname() {
		return sortname;
	}

	public void setSortname(String sortname) {
		this.sortname = sortname;
	}

	public String getSortorder() {
		return sortorder;
	}

	public void setSortorder(String sortorder) {
		this.sortorder = sortorder;
	}
	
	public List<T> getList() {
		return list;
	}

	public void setList(List<T> list) {
		this.list = list;
	}

	/**
	 * 转化器
	 * 
	 * @author chenchuan
	 * 2014年10月25日
	 */
	public static Pager<Object> convert(int page,int pagesize,String sortname,String sortorder){
		Pager<Object> pager = new Pager<Object>();
		if(page > 0)
			pager.setCurrPage(page);
		if(pagesize > 0)
			pager.setPageSize(pagesize);
		if(sortname != null)
			pager.setSortname(sortname);
		if(sortorder != null)
			pager.setSortorder(sortorder);
		return pager;
	}
	
}
